home *** CD-ROM | disk | FTP | other *** search
/ Euroscene 2 / Euroscene 2.iso / USEFUL / libs / FileSys / XFH / XFH.doc < prev    next >
Text File  |  1995-11-01  |  20KB  |  390 lines

  1.  
  2.  
  3.                   Xpk File System Handler v1.12
  4.  
  5.                       By Kristian Nielsen
  6.  
  7.  
  8. This package may be distributed freely for non-commercial purposes along
  9. with Xpk or on its own, provided that all files and subdirectories are
  10. left intact. However, all rights remain with the author. And as usual,
  11. the author will in no way be held responsible for any damage, directly,
  12. implicit or otherwise, resulting from the use of this program. After
  13. all, you get this program for free; use it or not as you like, and at
  14. your own risk. 
  15.  
  16. The file 'README' (which should be distributed alone with this file) gives
  17. information on how to get started quickly while this text gives a more
  18. technical discussion of the XFH file system handler.
  19.  
  20.  
  21.  
  22.                               --- O ---
  23.  
  24.  
  25. What's possible.
  26.  
  27.    XFH, when used with Xpk, makes it possible to store data in compressed
  28. format without this being visible to the user or to application programs -
  29. XFH will make the compressed data appear like ordinary files. This is by
  30. no means a new idea. In MS-DOS world, a (commercial) program called
  31. 'Stacker' has been available for some time, which makes it possible to
  32. compress a whole partition on a harddisk. On the amiga, people have long
  33. used powerpacker along with programs like PPMore to store data files in
  34. packed formats (but relying on the application to recognise that the file
  35. is in compressed format), and programs like PPPatch have been used to
  36. change dos.library to recognise the powerpacker format automatically.
  37. However, none of these approaches are perfect in all situations, and so
  38. there is room for another alternative - the XFH.
  39.  
  40.    XFH works in conjuction with the Xpk approach to data compression. This
  41. in itself gives a number of advantages - a flexible interface to the 
  42. compressing algorithms, lots of different packers available with the
  43. possibility to add new ones etc. But compared to approaches like 
  44. 'Stacker', there is an additional advantage: access to the compressed 
  45. data is not limited to XFH - most of the time, the XFH way will be the 
  46. most convenient way to access data, but if needed, the complete range of 
  47. Xpk applications is available to the user. The file orientated nature of 
  48. Xpk also means that XFH - like PPPatch etc., but unlike Stacker - will 
  49. co-exists nicely with any other Amiga filing system without the need to 
  50. set up any new partitions or prepare the disk with a special program. In 
  51. fact, if you happened to have a CD-Rom (read only) stuffed with 
  52. powerpacked files (or any other format that the current version of Xpk 
  53. supports), you could dump an XFH unit on top of it and largely forget 
  54. about the disk being compressed from then on.
  55.  
  56.    So, what is possible is to mount a XFH unit on top of each of one or
  57. more standard AmigaDOS directories. It is now possible for programs to
  58. access the directories as usual, data being decompressed and optionally
  59. compressed as needed in a completely transparent way - programs will
  60. never know the difference between compressed and uncompressed files -
  61. while still having access to the compressed data using conventional
  62. compress/uncompress programs. So the dream is that of doubling the
  63. capacity of your hard- or floppydisks for zero cost. 
  64.  
  65.    As an example of the possibilities of the XFH, I have been using it for 
  66. a couple of months for holding various doc files, metafont sources and 
  67. little used emacs scripts and shell commands on HD, saving in the order 
  68. of perhaps 60% file space with no noticeable degrading of overall system 
  69. performance.
  70.  
  71.  
  72.                               --- O ---
  73.  
  74.  
  75. What is the catch?
  76.  
  77.    Of course, as everyone knows, nothing comes for free. Obviously,
  78. there is a speed penalty to compressing or uncompressing a file.  This
  79. speed penalty will be highly dependent on the actual compression
  80. algorithm and data media used; for example an algebraic compression
  81. scheme used with a superfast HD will probably be rather slow, while a
  82. fast algorithm may actually result in a speed-up of floppy access since
  83. the disk access time saved by the smaller file size more that accounts
  84. for the time taken decompressing. And of course with the coming of ever
  85. more powerful CPU's the speed will be less of a problem. Some things
  86. will always be slow, though. Especially directory listning is a
  87. problem, since every single file has to be opened in order to check
  88. whether the file is compressed or not. In fact, I'll admit that running
  89. XFH from floppy on an unaccelerated amiga will sometimes seem a bit
  90. slow. However, XFH was not written to be as fast and small as possible,
  91. but rather to be flexible and expandable. And I'm sure a lot of users
  92. will find it very useful even on 'small' amigas. On an A3000, XFH runs
  93. like a dream, of course. And there is still the possibility for speed
  94. improvements in later versions. 
  95.  
  96.    Aside from the problem of speed, V1.12 of the XFH comes with a few 
  97. other limitations that I'm hoping to remove in later versions. Most 
  98. important is the lack of most of the new 2.0 packets, a lack that will 
  99. become more severe as more 2.0-only programs start to depend on these 
  100. packets. Another problem is that XFH in the present version is somewhat 
  101. memory-hungry, in that it will keep any compressed file completely 
  102. unpacked in memory as long as that file is open. This is mostly due to 
  103. limitations in the current Xpk interface, and I'm hoping to remove this 
  104. in a later release. However, currently this means that it is impossible 
  105. to open a compressed file if it is larger than available memory.
  106.  
  107.    A number of other problems to look out for are detailed in a later 
  108. section in this doc file. Most of these are things that could be fixed in 
  109. later versions.
  110.  
  111.  
  112.  
  113.                               --- O ---
  114.  
  115.  
  116. Instructions for use.
  117.  
  118.    XFH is implemented as an AmigaDOS device handler. The 'L:' directory 
  119. contains examples of other such device handlers, and this is usually also
  120. the best place to put XFH (the file 'XFH-Handler', to be precise). Like 
  121. other handlers, XFH must be mounted before it can be used. This can be
  122. done by creating an entry for it in the 'DEVS:Mountlist' file (just the
  123. mountlist for short) and issuing the command 'Mount <device>', where 
  124. <device> is the name given to the device in the mountlist. The supplied 
  125. file 'Devs/Mountlist' contains four example entries for the XFH; it might 
  126. be convenient to append this file to the end of 'DEVS:Mountlist'. The 
  127. most important part of each mountlist entry is the unit number (the 
  128. number used in the 'Unit = ...' line), since this is used to control what 
  129. files that particulary XFH unit should (de)compress, how it should do it 
  130. etc. Further information on the mechanism of mountlists and handlers in 
  131. general can be found in various places; I will not attempt any lenghty 
  132. explanation here.
  133.  
  134.    Unlike most other 'normal' device handlers, XFH needs additional 
  135. information to function correctly. Most importantly it needs to be told 
  136. what directory it should use as its root directory (that is, where it 
  137. should look for compressed files). In the simplest case, this can be done 
  138. by assigning 'XFH<n>:' to this directory, where <n> is the unit number as 
  139. given in the mountlist. However, XFH also provides 'options' which
  140. provide much more flexibility and which MUST be used if the handler is to 
  141. compress files automatically as they are written by applications.
  142.  
  143.    In the current version all options must be set in files (hopefully a
  144. later version will also provide an AREXX interface).  An option is
  145. specified on a line of its own, and follows the same conventions as the
  146. TOOLTYPES of the Workbench.  XFH has the concept of primary and
  147. secondary option files.  The primary option file, for XFH unit number
  148. <n>, is placed in the file 'S:Xfh/.xfhrc_<n>'.  The secondary option
  149. file is named '.xfhrc' and is placed in the root directory of the XFH
  150. unit (uncompressed!).  The settings in the secondary option file
  151. overrides any settings in the primary option file, but there are some
  152. restrictions on the options that can be used in the secondary option
  153. file, see below.  Both files are optional, the handler will pick default
  154. values for any options that are not set by the user.  The supplied
  155. directory 's/xfh/' contains example primary option files for units 1-3. 
  156.  
  157.    Boolean options can be specified with "NO" / "OFF" or. "YES" / "ON". 
  158. String options are specified by simply putting the string after the 
  159. 'OPTION=' bit, no quotes are needed.
  160.  
  161. The available options are detailed below:
  162.  
  163.    ROOTDIR
  164.    VOLUMENAME
  165.    AUTOCOMPRESS
  166.    PACKMODE
  167.    STEPDOWN
  168.    PASSWORD
  169.    XPKPRIORITY
  170.    TRUNCATEONPACK
  171.  
  172. Option ROOTDIR:
  173.    This option is used to set the name of the directory that XFH: is to
  174. reside in. For example 'ROOTDIR=Work:xfh' would cause XFH: to use that
  175. directory as root. Note that this option can only be used in the primary 
  176. option file 's:xfh/.xfhrc_<unit>'. When used elsewhere it will simply be
  177. ignored. If this option is not specified, XFH will use the assign
  178. 'XFH<n>:', where <n> is the unit number. This is mainly for compatibility
  179. with earlier versions of XFH: ; using the ROOTDIR option is a much cleaner
  180. way of doing this.
  181.  
  182. Option VOLUMENAME:
  183.    This option is used to set the name of the XFH: volume. This is the name 
  184. that will be used in absolute path specifications, as well as the one 
  185. returned by Info(). Ie. if you go 'VOLUMENAME=Manuals', access can be by 
  186. 'Manuals:' as well as by 'XHn:' (or whatever). Like ROOTDIR, this option can 
  187. only be used in the primary option file. If this option is not specified, 
  188. the default is to use the name of the directory in the underlying file 
  189. system, or (if this is itself the root of a volume) to use the name with 
  190. 'XFH_' prepended. Again, this is mainly for compatibility with early 
  191. versions of XFH:.
  192.    Note that this option can be seen as a replacement for the 'Relabel' 
  193. command (which isn't supported).
  194.  
  195. Option AUTOCOMPRESS:
  196.    This options tells whether XFH: should attempt to compress the files
  197. written through it. When this option is set, everytime a file written to
  198. the XFH: is closed, an attempt will be made to compress the file to a
  199. temporary file using Xpk. If this is succesfull, the temporary file will
  200. be renamed to the original name and the uncompressed file will be deleted.
  201. If the compression fails for any reason, the uncompressed file will simply
  202. remain intact. This also means that if anything should go wrong during
  203. compression (like a disk full error), it is unlikely that any data will
  204. be lost since at least one of the two files should be intact (though
  205. possibly with a wierd name). This option is OFF by default.
  206.  
  207. Option PACKMODE:
  208.    This option selects the mode that Xpk should use when compressing files.
  209. It is specified in the usual way when using Xpk. For example, to use 12-bit
  210. BLZW compression, 'PACKMODE=BLZW.12' would be used. The default is to use
  211. the NUKE compression ('PACKMODE=NUKE'). Of course, to use a specific 
  212. compression method, the nessesary sublibrary must be available in LIBS:.
  213.  
  214. Option STEPDOWN:
  215.    This option controls the Xpk flag 'XPK_StepDown' during packing. If set,
  216. it means that Xpk is allowed to reduce packing efficiency if nessesary to
  217. save memory. Refer to the Xpk documentation for details. Default is OFF.
  218.  
  219. Option PASSWORD:
  220.    This option is used to set the password that XFH: should pass on to
  221. Xpk when compressing or uncompressing. It should be noted that there is 
  222. no attempt to keep this password safe from 'memory peekers'. Of course, 
  223. storing the password in the option file isn't actually safe either. The 
  224. latter problem will be solved when XFH gets an AREXX interface; until 
  225. then, a script something like this
  226.  
  227.    copy xfhoptions/.xfhrc xfhdir:         ; xfhdir: is the root of xfh:
  228.    echo >> xfhdir:.xfhrc "PASSWORD=..."
  229.    mount XFH:
  230.    info >nil: xfh:                        ; Make sure it's really loaded.
  231.    copy xfhoptions/.xfhrc xfhdir:
  232.    echo >> xfhdir:.xfhrc "PASSWORD=***"   ; Really erase from disk.
  233.  
  234. could be used, though it still isn't completely safe. Finally note that
  235. if AUTOCOMPRESS is requested, files may still be saved unencrypted in
  236. low-memory or low-diskspace situations, and (depending on the underlying
  237. file system / disk device) part of the unencrypted data may still be
  238. physically stored on the disk after the deletion of the unencrypted file.
  239.    If an attempt to open a file is made when XFH has been given the wrong
  240. password, the open will fail with error code 212 (Object wrong type).
  241.  
  242. Option XPKPRIORITY:
  243.    This option is used to set the task priority that should be used when 
  244. doing Xpk operations (compress/uncompress etc). Setting this to zero or 
  245. less will prevent XFH from stealing all CPU-time from tasks running at a 
  246. 'normal' priority. Note that it is possible to set the priority of the 
  247. handler itself in the mountlist. If this option is not used, the handler 
  248. will keep whatever priority it is running ta when calling the Xpk library.
  249.  
  250. Option TRUNCATEONPACK:
  251.    This option is somewhat technical in nature and can be safely ignored.
  252. It is only used in case of an error occuring during the compression of a
  253. file. In this case, the compressed file has to be deleted, and if this
  254. option is set, the handler will try to call SetFileSize() first to truncate
  255. the file to 0 bytes (perhaps saving the flushing of a few buffers).
  256. However, due to sparse documentation I'm uncertain whether this feature is
  257. stable, and hence it is OFF by default. Again, unless you are curious and
  258. don't mind risking crashes/data losses, forget about this option.
  259.  
  260.  
  261. In case of an error during the scanning of the option files the handler
  262. will fail its initialisation and hence refuse to load with error code 114
  263. (Bad Template). Sorry, but there are currently no real error messages
  264. implented (this will hopefully be fixed in a later version). If the handler
  265. refuses to work for no apparent reason, be sure to tripple-check your
  266. option files for errors.
  267.  
  268.  
  269.  
  270.  
  271.                               --- O ---
  272.  
  273.  
  274. Limitations and known bugs.
  275.  
  276.    The error detection code in the initialisation part of the handler is 
  277. somewhat flaky - I've tried to make it resonably safe, but documentation 
  278. on the right way to start a handler is hard to find. What it means is 
  279. that it is a good idea to make sure that the handler is placed in L: and
  280. that the nessesary Xpk libraries are placed in libs: before starting the 
  281. handler (remember, XFH won't be able to tell you the reason if it was 
  282. unable to initialise for some reason). Another subtle problem is that due 
  283. to a quirk of the device list locking, it is vital (using XFH v1.12) that 
  284. the handler for the directory that XFH is to sit in is already loaded. 
  285. Usually this will not be a problem; however, if you are using 3rd party 
  286. filesystem handlers that are mounted after boot-up, you can avoid 
  287. problems by accessing them before mounting XFH (for example by creating 
  288. an assign (not late-binding) to them).
  289.  
  290.    It should be noted that the way the XFH makes the same files available 
  291. by two different routes is not without its problems. One problem is 
  292. connected to the volume name - XFH tries to be smart about it, but it will 
  293. sometimes create a duplicate volume name which is a bad idea. To solve 
  294. this problem the VOLUMENAME option should be used in an option file.
  295. Another problem when mounting XFH in the root dir appears when using the
  296. 'Leave Out' feature of the 2.0 Workbench. Here, the '.backdrop' is 
  297. duplicated in both volumes, making the left-out icons appear twice. I'm 
  298. working on a decent solution to this problem. Meanwhile, I would recommend 
  299. that XFH is mounted only on top of subdirectories.
  300.  
  301.    For convenience, the handler allows the opening of and writing to new
  302. files. Also, XFH now facilitates automatic compression, as discussed in
  303. the description of the AUTOCOMPRESS option. However, note that the
  304. handler does not yet support opening existing files for writing (this is
  305. technically refered to as MODE_READWRITE or ACTION_FINDUPDATE), and
  306. writing to compressed files opened in shared mode (MODE_OLDFILE) also
  307. does not work. This means that for example it is not possible to append
  308. something to a file using the shell '>>' redirection. Still, keeping
  309. this in mind it should nevertheless be possible to use the handler even
  310. in directories where files are often being written to. 
  311.  
  312.    Needless to say (but I'll say it anyway), you should not assign libs: 
  313. to a XFH unit unless you are absolutely sure of what you are doing. A 
  314. nice trap is to have the XFH call (and wait for) Xpk, which will then wait
  315. for XFH to load a particular library for it... This also applies to s:
  316. (since the option files are stored here).
  317.  
  318.    It should be noted that any given unit of the XFH binds to a directory, 
  319. not to a DOS device. This means that, currently, it is not possible to 
  320. have a XFH unit working like DFx: - any access will refer to the disk that 
  321. was in the drive when the handler was started, not to the disk currently 
  322. in the drive.
  323.  
  324.    The figures reported by the shell 'Info' command are somewhat strange.
  325. The problem is that it isn't really possible to give sensible figures for
  326. 'NumBlocks' and 'NumBlocksUsed'. Currently, their values are the same as
  327. those for the underlying file system.
  328.  
  329.    XFH has problems with exclusive locks (for example trying to obtain an 
  330. exclusive lock on "/" or "foo//" will always fail).
  331.  
  332.    Some people have experienced problems when using XFH with the 
  333. arp.library. This is because a bug/feature in the apr.library function 
  334. CompareLock() (it declares two locks equal only if the lock->fl_Key 
  335. fields are equal, which is illegal according to the 2.0 DOS manual). 
  336. Under 2.0, the program in the directory 'patcharp' can be used to patch 
  337. arp to use the correct 2.0 SameLock() call. Also, I know of a program 
  338. that remaps the arp calls to the corresponding 2.0 dos.library calls 
  339. (though I haven't tried it), it might help too.
  340.  
  341.    (This one is a bit technical in nature:) Currently, for reasons having 
  342. to do with the reading of the primary option file, 'S:' must to refer to 
  343. an assign (or a volume), not to a device like df0: or ram:. However, 
  344. since it is almost always an assign (to SYS:s or something), this 
  345. shouldn't be a big problem.
  346.  
  347.    It has been reported to me that some disk toolkit programs (like DiskX) 
  348. have problems with the "dummy.devide" entry in the mountlist. If you 
  349. experience any problems with this, you should try changing this entry to 
  350. something else (like "trackdisk.device" or "scsi.device") or omit it 
  351. entirely; it is not used by XFH and is only there for the sake of the 
  352. 'Mount' command.
  353.  
  354.  
  355.                               --- O ---
  356.  
  357.  
  358. Theory of operation.
  359.  
  360.    XFH works by installing itself in the system as a file system handler 
  361. like DF0: or RAM:. However, unlike most file system handlers, which sit on 
  362. top of a device (or rest in themselves like RAM:), XFH sits on top of an 
  363. underlying file system handler (abbrevated to UFS) containing a mixture 
  364. of normal and compressed files. After initialising itself, XFH sits in a 
  365. loop receiving packets from AmigaDOS and other applications. Each packet 
  366. is examined and the appropriate action taken. For example, an open request 
  367. will cause XFH to open the given file, check whether it is compressed, and 
  368. if so unpack it to memory for later read requests.
  369.  
  370.    XFH is currently single-threaded, unlike the Commodore file systems 
  371. (this means that it is not possible for the XFH to service other requests 
  372. while waiting for the UFS). I'm hoping to fix this in some later version.
  373.  
  374.  
  375.  
  376.                               --- O ---
  377.  
  378.  
  379. Acknowledgments.
  380.  
  381.    The author wishes to thank all the people that have participated in 
  382. the development of Xpk without which the XFH would not have been the 
  383. same. I am especially grateful to Urban D. Müller for helping me start
  384. the whole concept of the XFH back in the summer of 1991 - without his 
  385. help the XFH is not likely to have been realised. Thanks also to the many 
  386. beta testers who helped me iron out as many bugs as possible before 
  387. release; your help work has been very valuable to me. And thanks must 
  388. go, of course, to the guys at Commodore for bringing to us the wonderful 
  389. Amiga.
  390.